home *** CD-ROM | disk | FTP | other *** search
/ Libris Britannia 4 / science library(b).zip / science library(b) / DJGPP / GAS211S2.ZIP / src / gas-211 / include / coff / i386.h < prev    next >
C/C++ Source or Header  |  1993-05-30  |  5KB  |  214 lines

  1. /*** coff information for Intel 386/486.  */
  2.  
  3.  
  4. /********************** FILE HEADER **********************/
  5.  
  6. struct external_filehdr {
  7.     char f_magic[2];    /* magic number            */
  8.     char f_nscns[2];    /* number of sections        */
  9.     char f_timdat[4];    /* time & date stamp        */
  10.     char f_symptr[4];    /* file pointer to symtab    */
  11.     char f_nsyms[4];    /* number of symtab entries    */
  12.     char f_opthdr[2];    /* sizeof(optional hdr)        */
  13.     char f_flags[2];    /* flags            */
  14. };
  15.  
  16.  
  17. /* Bits for f_flags:
  18.  *    F_RELFLG    relocation info stripped from file
  19.  *    F_EXEC        file is executable (no unresolved external references)
  20.  *    F_LNNO        line numbers stripped from file
  21.  *    F_LSYMS        local symbols stripped from file
  22.  *    F_AR32WR    file has byte ordering of an AR32WR machine (e.g. vax)
  23.  */
  24.  
  25. #define F_RELFLG    (0x0001)
  26. #define F_EXEC        (0x0002)
  27. #define F_LNNO        (0x0004)
  28. #define F_LSYMS        (0x0008)
  29.  
  30.  
  31.  
  32. #define    I386MAGIC    0x14c
  33. #define I386AIXMAGIC    0x175
  34. #define I386BADMAG(x) (((x).f_magic!=I386MAGIC) && (x).f_magic!=I386AIXMAGIC)
  35.  
  36.  
  37. #define    FILHDR    struct external_filehdr
  38. #define    FILHSZ    sizeof(FILHDR)
  39.  
  40.  
  41. /********************** AOUT "OPTIONAL HEADER" **********************/
  42.  
  43.  
  44. typedef struct 
  45. {
  46.   char     magic[2];        /* type of file                */
  47.   char    vstamp[2];        /* version stamp            */
  48.   char    tsize[4];        /* text size in bytes, padded to FW bdry*/
  49.   char    dsize[4];        /* initialized data "  "        */
  50.   char    bsize[4];        /* uninitialized data "   "        */
  51.   char    entry[4];        /* entry pt.                */
  52.   char     text_start[4];        /* base of text used for this file */
  53.   char     data_start[4];        /* base of data used for this file */
  54. }
  55. AOUTHDR;
  56.  
  57.  
  58. #define AOUTSZ (sizeof(AOUTHDR))
  59.  
  60. #define OMAGIC          0404    /* object files, eg as output */
  61. #define ZMAGIC          0413    /* demand load format, eg normal ld output */
  62. #define STMAGIC        0401    /* target shlib */
  63. #define SHMAGIC        0443    /* host   shlib */
  64.  
  65.  
  66. /********************** SECTION HEADER **********************/
  67.  
  68.  
  69. struct external_scnhdr {
  70.     char        s_name[8];    /* section name            */
  71.     char        s_paddr[4];    /* physical address, aliased s_nlib */
  72.     char        s_vaddr[4];    /* virtual address        */
  73.     char        s_size[4];    /* section size            */
  74.     char        s_scnptr[4];    /* file ptr to raw data for section */
  75.     char        s_relptr[4];    /* file ptr to relocation    */
  76.     char        s_lnnoptr[4];    /* file ptr to line numbers    */
  77.     char        s_nreloc[2];    /* number of relocation entries    */
  78.     char        s_nlnno[2];    /* number of line number entries*/
  79.     char        s_flags[4];    /* flags            */
  80. };
  81.  
  82. #define    SCNHDR    struct external_scnhdr
  83. #define    SCNHSZ    sizeof(SCNHDR)
  84.  
  85. /*
  86.  * names of "special" sections
  87.  */
  88. #define _TEXT    ".text"
  89. #define _DATA    ".data"
  90. #define _BSS    ".bss"
  91. #define _COMMENT ".comment"
  92. #define _LIB ".lib"
  93.  
  94. /********************** LINE NUMBERS **********************/
  95.  
  96. /* 1 line number entry for every "breakpointable" source line in a section.
  97.  * Line numbers are grouped on a per function basis; first entry in a function
  98.  * grouping will have l_lnno = 0 and in place of physical address will be the
  99.  * symbol table index of the function name.
  100.  */
  101. struct external_lineno {
  102.     union {
  103.         char l_symndx[4];    /* function name symbol index, iff l_lnno == 0*/
  104.         char l_paddr[4];    /* (physical) address of line number    */
  105.     } l_addr;
  106.     char l_lnno[2];    /* line number        */
  107. };
  108.  
  109.  
  110. #define    LINENO    struct external_lineno
  111. #define    LINESZ    6
  112.  
  113.  
  114. /********************** SYMBOLS **********************/
  115.  
  116. #define E_SYMNMLEN    8    /* # characters in a symbol name    */
  117. #define E_FILNMLEN    14    /* # characters in a file name        */
  118. #define E_DIMNUM    4    /* # array dimensions in auxiliary entry */
  119.  
  120. struct external_syment 
  121. {
  122.   union {
  123.     char e_name[E_SYMNMLEN];
  124.     struct {
  125.       char e_zeroes[4];
  126.       char e_offset[4];
  127.     } e;
  128.   } e;
  129.   char e_value[4];
  130.   char e_scnum[2];
  131.   char e_type[2];
  132.   char e_sclass[1];
  133.   char e_numaux[1];
  134. };
  135.  
  136. #define N_BTMASK    (0xf)
  137. #define N_TMASK        (0x30)
  138. #define N_BTSHFT    (4)
  139. #define N_TSHIFT    (2)
  140.   
  141. union external_auxent {
  142.     struct {
  143.         char x_tagndx[4];    /* str, un, or enum tag indx */
  144.         union {
  145.             struct {
  146.                 char  x_lnno[2]; /* declaration line number */
  147.                 char  x_size[2]; /* str/union/array size */
  148.             } x_lnsz;
  149.             char x_fsize[4];    /* size of function */
  150.         } x_misc;
  151.         union {
  152.             struct {        /* if ISFCN, tag, or .bb */
  153.                 char x_lnnoptr[4];    /* ptr to fcn line # */
  154.                 char x_endndx[4];    /* entry ndx past block end */
  155.             } x_fcn;
  156.             struct {        /* if ISARY, up to 4 dimen. */
  157.                 char x_dimen[E_DIMNUM][2];
  158.             } x_ary;
  159.         } x_fcnary;
  160.         char x_tvndx[2];        /* tv index */
  161.     } x_sym;
  162.  
  163.     union {
  164.         char x_fname[E_FILNMLEN];
  165.         struct {
  166.             char x_zeroes[4];
  167.             char x_offset[4];
  168.         } x_n;
  169.     } x_file;
  170.  
  171.     struct {
  172.         char x_scnlen[4];            /* section length */
  173.         char x_nreloc[2];    /* # relocation entries */
  174.         char x_nlinno[2];    /* # line numbers */
  175.     } x_scn;
  176.  
  177.         struct {
  178.         char x_tvfill[4];    /* tv fill value */
  179.         char x_tvlen[2];    /* length of .tv */
  180.         char x_tvran[2][2];    /* tv range */
  181.     } x_tv;        /* info about .tv section (in auxent of symbol .tv)) */
  182.  
  183.  
  184. };
  185.  
  186. #define    SYMENT    struct external_syment
  187. #define    SYMESZ    18    
  188. #define    AUXENT    union external_auxent
  189. #define    AUXESZ    18
  190.  
  191.  
  192. #    define _ETEXT    "etext"
  193.  
  194.  
  195. /********************** RELOCATION DIRECTIVES **********************/
  196.  
  197.  
  198.  
  199. struct external_reloc {
  200.   char r_vaddr[4];
  201.   char r_symndx[4];
  202.   char r_type[2];
  203. };
  204.  
  205.  
  206. #define RELOC struct external_reloc
  207. #define RELSZ 10
  208.  
  209. #define DEFAULT_DATA_SECTION_ALIGNMENT 4
  210. #define DEFAULT_BSS_SECTION_ALIGNMENT 4
  211. #define DEFAULT_TEXT_SECTION_ALIGNMENT 4
  212. /* For new sections we havn't heard of before */
  213. #define DEFAULT_SECTION_ALIGNMENT 4
  214.